// TODO
//  统计出每一个省份广告被点击次数的TOP3
//  假设这些信息都存储在一个文件里， 并且该文件的格式如下，时间戳，省份，城市，用户，广告，中间字段使用空格分割
//  (1)将数据转换为键值对的形式(省份-广告，点击数)。
//  (2)计算相同key的点击数和(省份-广告，点击数和)。
//  (3)转换key的结构(省份广告，点击数和) = (省份，(广告，点击数和) )。
//  (4)按照key聚合。
//  (5)对值进行排序。

import org.apache.spark.{SparkConf, SparkContext}

object 上机04 {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext(new SparkConf().setMaster("local[*]").setAppName(""))

    println("省份广告被点击次数的TOP3\n")
    sc.textFile("in/03.txt")
      .map(line => line.split(" "))
      .map(arr => (arr(1) + "-" + arr(4), 1))
      .reduceByKey(_ + _)
      .map(tp => (tp._1.split("-")(0), tp._1.split("-")(1), tp._2))
      .groupBy(_._1)
      .map(tp => (tp._1, tp._2.map(tpi => (tpi._2, tpi._3)).toSeq.sortBy(_._2).reverse))
      .repartition(1)
      .sortByKey()
      .foreach(tp=>{
        println("省份"+tp._1+":")
        if(tp._2.nonEmpty)
          for(i<- 0 until (if(3<tp._2.length) 3 else tp._2.length))
            println("\t广告号："+tp._2(i)._1+"  \t-->\t   "+tp._2(i)._2+'次')
      })
}
}
